昨日 DAY 21 所討論的專案架構,可能也和我們日常更新的排程規劃有關。
在 DAY 12 時有提過,我們在執行 dbt run
或是 dbt build
的時候,可以用 --select
參數,選擇只跑單一 model,或是加跑他的上游/下游/上下游。
除了針對單一 model,我們也可以一次跑一整個資料夾底下的 model,以及加跑上游/下游/上下游,例如
dbt run --select staging.jira+
就會跑 staging 底下 jira 資料夾的所有 models 以及他們的下游。
如果我們依照資料來源系統分資料夾,一個資料來源系統放一個資料夾,我們就可以依照資料來源,設定不同的更新頻率。
例如我們希望 SAP 資料每小時更新,那我就會設定每小時跑的排程,執行以下指令:
dbt run --select staging.sap+
至於 Google Analytics,只需要一天更新一次,那我就會設定每天跑一次的排程,執行以下指令:
dbt run --select staging.google_analytics+
相對於選取資料來源,依照 staging 的資料夾更新,我們也可以依照 output 的種類來更新資料。
例如我們依照使用資料的部門來分 marts 的資料夾,我們就可以把 marketing 部門的資料集中在同一個資料夾。
當該部門要求資料更新時,我們就可以依照該資料夾來設定排程。
以下指令執行的是 marts 中,martketing 資料夾底下所有的 model,及所有上游的 models。
dbt run --select +marts.marketing
我們也可以以 DAY 20 提過的 exposures 為單位,更新資料。
例如我希望所有 Tableau 的資料,兩小時更新一次,我就可以在每兩小時跑一次的排程,執行以下指令。
dbt run --select +exposure:tableau_data_source
我們就可以告訴使用者,所有 Tableau 的資料源,皆為每兩小時更新一次。
最後,我們也可以幫每個資料夾或 model 設定 tags,使用這些 tags 為更新的單位。
tag 可以隨意設定,一個 model 可以設定多個 tags。
我們可以在 model 上方加上 tags:
{{ config(tags=["marketing", "google_analytics", "hourly_update"]) }}
或在 YAML 檔依資料夾設定
models:
jaffle_shop:
staging:
google_analytics:
+tags:
- "marketing"
- "google_analytics"
- "hourly_update"
就可以依照 tag 跑指令:
dbt run --select tag:hourly_update
tags 可以有更多彈性,但也需要花點心思維護。
接下來四天會討論 dbt Core,在本機安裝環境以及開發,會有些技術門檻。
明天的主題:設定 dbt Core 本機環境
歡迎加入 dbt community
對 dbt 或 data 有興趣 👋?歡迎加入 dbt community 到 #local-taipei 找我們,也有實體 Meetup 請到 dbt Taipei Meetup 報名參加